#include "ABB.h"

ABB::ABB()
{
    Raiz=NULL;

}
void ABB::Insertar(int clave, string dato)
{
    if(Vacio())
    {
        Raiz= new NodoArbol<string>(clave,dato);
    }
    else
    {
        Insertar(clave,dato,Raiz);
    }
    VIFS::V_WriteLog("BB: insercion");
}

void ABB::Insertar(int clave, string dato, NodoArbol<string> *raiz)
{

    if (raiz->getClave()<clave) {
        if(raiz->getHder()==NULL)
            raiz->setHder(new NodoArbol<string>(clave,dato));
        else
            Insertar(clave,dato,raiz->getHder());
    }
    else
        if (raiz->getHizq()==NULL) {
            raiz->setHizq(new NodoArbol<string>(clave,dato));

        } else {
            Insertar(clave,dato,raiz->getHizq());
        }


    }

bool ABB::Revisar(int clave)
{
    if (Vacio())
        return false;
    else{
        if (Raiz->getClave() == clave)
            return true;
        else{
            if (clave < Raiz->getClave())
                return Revisar(clave, Raiz->getHizq());
            else
                return Revisar(clave, Raiz->getHder());
        }
    }
}

bool ABB::Revisar(int clave, NodoArbol<string> *raiz)
{
    if (Vacio())
        return false;
    else{
        if (raiz->getClave() == clave)
            return true;
        else{
            if (clave < raiz->getClave())
                return Revisar(clave, raiz->getHizq());
            else
                return Revisar(clave, raiz->getHder());
        }
    }
}


string ABB::Index(int clave)
{
    return Index(clave, Raiz);
}

string ABB::Index(int clave, NodoArbol<string> *raiz)
{
    if (raiz->getClave() == clave)
        return raiz->getContenedor();
    else{
        if (clave < raiz->getClave())
            return Index(clave, raiz->getHizq());
        else
            return Index(clave, raiz->getHder());
        }
}
